<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Imagem_Lib {
	
	protected $CI;
	
	public function __construct()
	{
		// Carregando a library session
		$this->CI =& get_instance();
		$this->CI->load->library ('image_lib');
		$this->CI->load->library ('upload');
	}
	
	public function upload($pasta, $id, $resize = false){
	
		try {
				
			$this->CI->image_lib->clear();
				
			$this->validaPastaExiste($pasta);
			
			//  upload an image options
			$config = null;
			$config['overwrite'] = true;
			$config['remove_spaces'] = false;
			$config['upload_path'] = $pasta.'/';
			$config['allowed_types'] = 'jpg|jpeg|png|gif';
			$config['max_size'] = '10240'; //Limite upload 10M

			$this->CI->upload->initialize( $config );
				
			//Separando o nome do arquivo com a extensão
			$arquivo = explode(".", $_FILES['userfile']['name']);
			$file_name = removeAcento(removeEspacoPorBarra(trim($arquivo[0])));
			//Juntando o novo nome e a extensão
			$file_name = $id . "_" . $file_name . "." .$arquivo[1];
				
			//Jogando novamente o novo nome.
			$_FILES['userfile']['name'] = $file_name;
			
			if ( $this->CI->upload->do_upload('userfile')){
				
				if($resize){
					//Redimensioando imagem
					$this->resize($this->CI->upload->data());
				}
	
				return $this->CI->upload->data();
	
			}else{
				return $this->CI->upload->display_errors();
			}
				
		} catch (Exception $e) {
			throw $e;
		}
	
	}
		
	public function uploadMultiple($pasta, $prefixoArquivo){
		
		try {
			$this->validaPastaExiste($pasta);
			
			//Variável para verificar se houve erro
			$erro = false;
			
			//  upload an image options
			$config = null;
			$config['overwrite'] = true;
			$config['remove_spaces'] = false;
			$config['upload_path'] = $pasta;
			$config['allowed_types'] = 'jpg|jpeg|png|gif';
			$config['max_size'] = '10240'; //Limite upload 10M
			
			$this->CI->load->library('upload', $config);
			
			//Array com o nome das imagens que vão retornar
			$images = array();
			
			$files = $_FILES['uploadFile'];
			
			foreach ( $files ['name'] as $key => $image ) {
				
				$nome = $prefixoArquivo . trim(removeAcento(removeEspacoPorBarra($image)));
				
				$_FILES ['uploadFile[]'] ['name'] = $nome;
				$_FILES ['uploadFile[]'] ['type'] = $files ['type'] [$key];
				$_FILES ['uploadFile[]'] ['tmp_name'] = $files ['tmp_name'] [$key];
				$_FILES ['uploadFile[]'] ['error'] = $files ['error'] [$key];
				$_FILES ['uploadFile[]'] ['size'] = $files ['size'] [$key];
				
				$images[] = $nome;

            	$this->CI->upload->initialize($config);
				
				if ($this->CI->upload->do_upload ( 'uploadFile[]' )) {
					
					//Redimensioando imagem
					$this->resize($this->CI->upload->data());					
					
				}else{
					$erro = true;
					break;
				}
			}
			
			if (!$erro){
				return $images;
			}else{
				return false;
			}
			
		} catch (Exception $e) {
			throw $e;
		}
		
	}
	

	public function removerArquivo($caminho){
		try {
			
			$valido = true;
			
			if(is_file($caminho)) {
				if(!unlink($caminho)){
					$valido = false;
				}
			}
			
			return $valido;
			
		} catch (Exception $e) {
			throw $e;
		}
	}
	
	public function resize($img){
		try {
			
			$config = null;
			$config['image_library'] = 'gd2';
			$config['source_image'] = $img['full_path'];
			$config['new_image'] = $img['file_path'].$img['raw_name'].$img['file_ext'];
			$config['maintain_ratio'] = TRUE;
			$config['width'] = LARGURA;
			$config['height'] = ALTURA;
			$config['quality'] = "100";
			
			$this->CI->image_lib->clear();
			$this->CI->image_lib->initialize($config);
			
			if ( ! $this->CI->image_lib->resize())
			{
				echo $this->CI->image_lib->display_errors();
			}
			
		} catch (Exception $e) {
			throw $e;
		}
	}
	
	private function validaPastaExiste($pasta){
		try {
			
			//Verificando se o diretório existe
			if (!file_exists ( $pasta )){
					
				//Criando diretório
				mkdir($pasta, 0777);
			}
			
		} catch (Exception $e) {
			throw $e;
		}
	}
	
	public function listaArquivosDiretorio($path, $prefixo){
		
		try {
			
			$diretorio = dir ( $path );
			
			$arquivos = array();
			
			
			while ( $arquivo = $diretorio->read () ) {
				
				$pos = strpos(trim($arquivo), trim($prefixo));
				
				//Encontrou
				if(!empty($pos) && is_numeric($pos)){
					$arquivos[] = $arquivo;
				}
				
			}
			
			$diretorio->close ();
			
			return $arquivos;
				
		} catch (Exception $e) {
			throw $e;
		}
		
	}
	
	public function removerArquivosDiretorio($path, $prefixo){
	
		try {
			
			$diretorio = dir ( $path );
				
			while ( $arquivo = $diretorio->read () ) {
				if (trim($arquivo) != "." && trim($arquivo) != ".."){
					
					$pos = strpos(trim($arquivo), trim($prefixo));
		
					//Encontrou
					if(!empty($pos) && is_numeric($pos)){
						unlink($diretorio->path.$arquivo);
					}
				}
			}
				
			$diretorio->close ();
			
		} catch (Exception $e) {
			throw $e;
		}
	
	}
	
	public function moverArquivos($caminhoOrigem, $caminhoDestinho, $imagens, $prefixo, $id){
		
		try {
			
			$valido = true;
			
			$this->validaPastaExiste($caminhoDestinho);
			
			foreach ($imagens as $img){
					
				$novoNome = str_replace($prefixo, $id."_", $img);
					
				if (!rename($caminhoOrigem.$img, $caminhoDestinho.$novoNome)){
					$valido = false;
					break;
				}
			}
			
			if (!$valido){
				$this->voltarArquivosOrigem($caminhoDestinho, $caminhoOrigem, $imagens, $id."_", $prefixo);
			}
			
			return $valido;
		
		} catch (Exception $e) {
			throw $e;
		}
		
	}
}